package org.jeecg.modules.system.util;


import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import org.apache.commons.lang3.StringUtils;

/**
 * @Description: 密码加密解密
 * @author: lsq
 * @date: 2020年09月07日 14:26
 */
public class SecurityUtil {
    /**
     * 加密key
     */
    private static String key = "JEECGBOOT1423670";

    //---AES加密---------begin---------

    /**
     * 加密
     *
     * @param content
     * @return
     */
    public static String jiami(String content) {
        SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes());
        String encryptResultStr = aes.encryptHex(content);
        return encryptResultStr;
    }

    /**
     * 解密
     *
     * @param encryptResultStr
     * @return
     */
    public static String jiemi(String encryptResultStr) {
        SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes());
        //解密为字符串
        String decryptResult = aes.decryptStr(encryptResultStr, CharsetUtil.CHARSET_UTF_8);
        return decryptResult;
    }

    /**
     * 验证密码强度 同时包含字母大小写、数字、特殊字符且长度不少于8位
     */
    public static boolean checkPassword(String password) {
//        // 8位以上
//        if(password == null || password.length()<8){
//            return false;
//        }
//        // 字母数字特殊字符(三种)
//        String reg = "^(?![0-9]+$)(?![^0-9]+$)(?![a-zA-Z]+$)(?![^a-zA-Z]+$)(?![a-zA-Z0-9]+$)[a-zA-Z0-9\\S]+$";
        // 同时包含字母大小写、数字、特殊字符且长度不少于8位
        String reg = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W_]+$)(?![A-Za-z\\W_]+$)(?![A-Z0-9\\W_]+$)[a-zA-Z0-9\\W_]{8,}$";
        return password.matches(reg);
    }

    /**
     * 8-20位，非重复字符串
     */
    public static boolean checkUsername(String username) {
        if (StringUtils.isNotEmpty(username)) {
            if (username.length() >= 8 && username.length() <= 20) {
                return username.replaceAll(username.substring(0, 1), "").length() != 0;
            }
        }
        return false;
    }


    //---AES加密---------end---------

    /**
     * 主函数
     */
//    public static void main(String[] args) {
//        System.out.println(checkUsername("aaaaaaaaaa1111111111"));

    //        String content = "test1111";
//        String encrypt = jiami(content);
//        System.out.println(encrypt);
//        //构建
//        String decrypt = jiemi(encrypt);
//        //解密为字符串
//        System.out.println(decrypt);
//    }
}
